Truffle 构建简单服务器应用遇到的一些问题

部署交易/执行交易方法时报错:

“Exceeds block gas limit” 或者 “Intrinsic gas too low”

参考: https://ethereum.stackexchange.com/questions/1832/cant-send-transaction-exceeds-block-gas-limit-or-intrinsic-gas-too-low

  1. 检查当前的 gas limit: 使用 geth attach ./geth.ipc 进入交互界面, 执行 eth.getBlock("latest").

如果提供的 gas 值大于这个值, 将会出现 ‘Exceeds block gas limit’ 错误.

  1. 检查 sendTransaction() 方法中的 gas 值, 该值最低为 21000.

低于这个值, 将出现 ‘intrinsic value too low’

部署交易时报错

“The contract code couldn’t be stored, please check your gas amount.”

初步认为是低于部署时消耗的 gas 值, 但是实际测试的时候, 还没有找到很容易找到合适值的方法.

“insufficient funds for gas * price + value”

认为是账户中余额不足, 或是初始化给的金额没有乘以 1e18, 参考: https://github.com/MetaMask/metamask-extension/issues/2655

通过控制台查看 以太币 余额: web3.fromWei(eth.getBalance(eth.accounts[0]), "ether"),
正常的 eth.getBalance(eth.accounts[0]) 是查看的最小单位, 并非是以太币, 交易时 gas 要乘以价格 1.8e10.

参考: https://ethereum.stackexchange.com/questions/28061/geth-sendtransaction-error-insufficient-funds-for-gas-price-value

“replacement transaction underpriced”

原因之一, 当我们使用账户密码解锁的方式没有问题, 但是使用 truffle-hdwallet-provider 的
助记词授权就出现该错误. 后来改用 truffle-privatekey-provider 以 private key 授权实现.

该问题看网上一些可行的解决方案, 均未能解决我们的问题, 猜测主要是因为可能多种原有会触发这个问题, 参考:
https://stackoverflow.com/questions/46349202/rinkeby-replacement-transaction-underpriced

###

Note: (小结)

部署交易要消耗一定的 gas 值, 部署交易的人要设置能接受的消费, 那么

最低 21000 限制 < 能接受的最低值 x < 实际消耗的值 < 能接受的最高值 y < 最高 eth.getBlock(“latest”)限制

一般情况 gas 的设置需要在 y 的位置.

Donate - Support to make this site better.
捐助 - 支持我让我做得更好.